工具栏

通过该属性,你可以为视图的导航栏或工具栏区域添加各种项目,类似于 SwiftUI 的 toolbar 修饰符功能。


概述

toolbar 属性接受一个 ToolBarProps 对象。ToolBarProps 中的每个键都对应特定的工具栏位置或操作类型。你提供的值可以是单个 VirtualNode 或一个包含多个 VirtualNode 元素的数组,这些节点代表自定义的 UI 项目。

SwiftUI 示例(参考)

1// SwiftUI 示例代码
2YourView()
3    .toolbar {
4        ToolbarItem(placement: .confirmationAction) {
5            Button("保存") {
6                // 处理保存操作
7            }
8        }
9    }

Scripting 示例(TypeScript/TSX)

1<NavigationStack>
2  <List
3    toolbar={{
4      confirmationAction: <Button title="保存" action={() => handleSave()} />,
5      cancellationAction: <Button title="取消" action={() => handleCancel()} />,
6      topBarLeading: [
7        <Button title="编辑" action={() => handleEdit()} />,
8        <Button title="刷新" action={() => handleRefresh()} />
9      ]
10    }}
11  >
12    {/* 主内容 */}
13  </List>
14</NavigationStack>

工具栏位置

以下是 ToolBarProps 中可用的键,用于指定项目的位置和行为:

  • automatic:根据上下文和平台自动确定位置。
  • bottomBar:将项目放置在底部工具栏。
  • cancellationAction:在模态界面中表示取消操作。
  • confirmationAction:在模态界面中表示确认操作(例如,“保存”)。
  • destructiveAction:表示执行破坏性任务的操作(例如,“删除”)。
  • keyboard:将项目放置在与键盘关联的工具栏中。
  • navigation:表示导航相关的操作(例如,“返回”或“关闭”)。
  • primaryAction:表示界面的主要操作。
  • principal:将项目放置在工具栏的主区域(通常在导航栏中居中)。
  • topBarLeading:将项目放置在顶部栏的靠前位置(例如左侧)。
  • topBarTrailing:将项目放置在顶部栏的靠后位置(例如右侧)。

使用示例

单个项目

如果想在工具栏中添加一个 confirmationAction 按钮:

1<NavigationStack>
2  <VStack
3    toolbar={{
4      confirmationAction: <Button
5        title="保存"
6        action={() => console.log('正在保存...')}
7      />
8    }}
9  >
10    {/* 主内容 */}
11  </VStack>
12</NavigationStack>

多个项目

可以将节点数组传递给单个位置,从而在同一区域添加多个项目:

1<NavigationStack>
2  <VStack
3    toolbar={{
4      topBarLeading: [
5        <Button title="编辑" action={() => console.log('编辑被点击')} />,
6        <Button title="设置" action={() => console.log('设置被点击')} />
7      ],
8      topBarTrailing: <Button title="完成" action={() => console.log('完成被点击')} />
9    }}
10  >
11    {/* 主内容 */}
12  </VStack>
13</NavigationStack>

组合多个工具栏位置

可以根据需要混合和匹配不同的工具栏位置:

1<NavigationStack>
2  <List
3    toolbar={{
4      navigation: <Button title="返回" action={() => console.log('返回被点击')} />,
5      principal: <Text fontWeight={"bold"}>标题</Text>,
6      primaryAction: <Button title="分享" action={() => console.log('分享被点击')} />,
7      bottomBar: <Button title="帮助" action={() => console.log('帮助被点击')} />
8    }}
9  >
10    {/* 主内容 */}
11  </List>
12</NavigationStack>

总结

通过使用 toolbar 属性,你可以轻松在 Scripting 应用中复制 SwiftUI 的 toolbar 修饰符行为。将 VirtualNode 元素分配给 ToolBarProps 中的合适键,能够为你的页面构建丰富的上下文工具栏和导航栏,从而增强用户体验。